<?php

namespace App\Http\Controllers\Example;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Redis;

class IndexController extends Controller
{
    

    public function index(Redis $redis){
        // 设置一个字符串的值
        $a=Redis::set('name', 'Taylor');
        ///取值 
        $b=Redis::get('name');
       
        //列表
        //存储数据到列表中
        //
        Redis::lpush('list', 'html');
        Redis::lpush('list', 'css');
        Redis::lpush('list', 'php');

        //获取列表中所有的值
        $list = Redis::lrange('list',0, -1);

        //从右侧加入一个
        Redis::rpush('list', 'mysql');
        $list = Redis::lrange('list', 0, -1);
        print_r($list);echo '<br>';
        
        //从左侧弹出一个
        Redis::lpop('list');
        $list = Redis::lrange('list', 0, -1);
        print_r($list);echo '<br>';

        //从右侧弹出一个
        Redis::rpop('list');
        $list = Redis::lrange('list', 0, -1);
        print_r($list);echo '<br>';
/*
*hash
* 
**/

        echo Redis::hset('hash', 'cat', 'cat');echo '<br>';
        echo Redis::hset('hash', 'cat', 'cat');echo '<br>';
        echo Redis::hset('hash', 'cat', 'cat1');echo '<br>';
        echo Redis::hset('hash', 'dog', 'dog');echo '<br>';
        echo Redis::hset('hash', 'bird', 'bird');echo '<br>';
        echo Redis::hset('hash', 'monkey', 'monkey');echo '<br>';
        //获取hash中某个key的值
       
        echo Redis::hget('hash', 'cat');echo '<br>';

        //获取hash中所有的keys
        $arr = Redis::hkeys('hash');
        print_r($arr);echo '<br>';

        //获取hash中所有的值 顺序是随机的
        $arr =Redis::hvals('hash');
        print_r($arr);echo '<br>';

        //获取一个hash中所有的key和value 顺序是随机的
        $arr =Redis::hgetall('hash');
        print_r($arr);echo '<br>';

        //获取hash中key的数量
        echo Redis::hlen('hash');echo '<br>';

        //删除hash中一个key 如果表不存在或key不存在则返回false
        echo Redis::hdel('hash', 'dog');echo '<br>';
        var_dump(Redis::hdel('hash', 'rabbit'));echo '<br>';


        //批量设置多个key的值
        $arr = [1=>1, 2=>2, 3=>3, 4=>4, 5=>5];
        Redis::hmset('hash', $arr);
        print_r(Redis::hgetall('hash'));echo '<br>';

        // 批量获得额多个key的值
        $arr = [1, 2, 3, 5];
        $hash = Redis::hmget('hash', $arr);
        print_r($hash);echo '<br>';

        //检测hash中某个key知否存在
        echo Redis::hexists('hash', '1');echo '<br>';
        var_dump(Redis::hexists('hash', 'cat'));echo '<br>';

        print_r(Redis::hgetall('hash'));echo '<br>';

        //给hash表中key增加一个整数值
        Redis::hincrby('hash', '1', 1);
        print_r(Redis::hgetall('hash'));echo '<br>';

        //给hash中的某个key增加一个浮点值
       // Redis::hincrbyfloat('hash', 2, 1.3);
       // print_r(Redis::hgetall('hash'));echo '<br>';

/*
*set
* 
**/
        // 添加一个元素
        echo Redis::sadd('set', 'cat');echo '<br>';
        echo Redis::sadd('set', 'cat');echo '<br>';
        echo Redis::sadd('set', 'dog');echo '<br>';
        echo Redis::sadd('set', 'rabbit');echo '<br>';
        echo Redis::sadd('set', 'bear');echo '<br>';
        echo Redis::sadd('set', 'horse');echo '<br>';

        // 查看集合中所有的元素
        $set = Redis::smembers('set');
        print_r($set);echo '<br>';

        //删除集合中的value
        echo Redis::srem('set', 'cat');echo '<br>';
        var_dump(Redis::srem('set', 'bird'));echo '<br>';

        $set = Redis::smembers('set');
        print_r($set);echo '<br>';

        //判断元素是否是set的成员
        var_dump(Redis::sismember('set', 'dog'));echo '<br>';
        var_dump(Redis::sismember('set', 'bird'));echo '<br>';

        //查看集合中成员的数量
        echo Redis::scard('set');echo '<br>';

        //移除并返回集合中的一个随机元素(返回被移除的元素)
        echo Redis::spop('set');echo '<br>';

        print_r(Redis::smembers('set'));echo '<br>';

        //集合
        Redis::sadd('set', 'horse');
        Redis::sadd('set', 'cat');
        Redis::sadd('set', 'dog');
        Redis::sadd('set', 'bird');
        Redis::sadd('set2', 'fish');
        Redis::sadd('set2', 'dog');
        Redis::sadd('set2', 'bird');

        print_r(Redis::smembers('set'));echo '<br>';
        print_r(Redis::smembers('set2'));echo '<br>';

        //返回集合的交集
        print_r(Redis::sinter('set', 'set2'));echo '<br>';

        //执行交集操作 并结果放到一个集合中
        Redis::sinterstore('output', 'set', 'set2');
        print_r(Redis::smembers('output'));echo '<br>';

        //返回集合的并集
        print_r(Redis::sunion('set', 'set2'));echo '<br>';

        //执行并集操作 并结果放到一个集合中
        Redis::sunionstore('output', 'set', 'set2');
        print_r(Redis::smembers('output'));echo '<br>';

        //返回集合的差集
        print_r(Redis::sdiff('set', 'set2'));echo '<br>';

        //执行差集操作 并结果放到一个集合中
        Redis::sdiffstore('output', 'set', 'set2');
        print_r(Redis::smembers('output'));echo '<br>';

/*
*Sorted Set(有序集合):
* 
**/

        Redis::flushAll();
    }
}
